/*
 * Copyright 2010-2012 Susanta Tewari. <freecode4susant@users.sourceforge.net>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package test.coalescent.data;

import commons.util.test.DefaultTDMeasure;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;

import static test.coalescent.data.DataTestDataInstances.*;

/**
 * Contains static methods to provide total number of ancestral counts for various data types, their
 * implementations and recursion.
 *
 * @author Susanta Tewari
 */
@SuppressWarnings("ReturnOfCollectionOrArrayField")
public class PopGenDataTDConfigCounts {

    /**
     * Constructs ...
     *
     */
    private PopGenDataTDConfigCounts() {}

    /**
     * Configuration counts for {@code GeneTree} and GT recursion.
     *
     * @return total number of ancestral configuration counts
     */
    public static Collection<PopGenDataTDConfigCount> getCounts_K69Data_GeneTree_GTRecursion() {

        Collection<PopGenDataTDConfigCount> counts = new ArrayList<>(10);

        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(3),
                heinKC64DataUIDPrefix + "D-2-2"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(5),
                heinKC64DataUIDPrefix + "D-3-1"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(4),
                heinKC64DataUIDPrefix + "D-3-2"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(4),
                heinKC64DataUIDPrefix + "D-3-3"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(7),
                heinKC64DataUIDPrefix + "D-4-1"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(6),
                heinKC64DataUIDPrefix + "D-4-2"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(7),
                heinKC64DataUIDPrefix + "D-4-3"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(5),
                heinKC64DataUIDPrefix + "D-4-4"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(9),
                heinKC64DataUIDPrefix + "D-5-1"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(9),
                heinKC64DataUIDPrefix + "D-5-2"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(9),
                heinKC64DataUIDPrefix + "D-5-3"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(6),
                heinKC64DataUIDPrefix + "D-5-4"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(13),
                heinKC64DataUIDPrefix + "D-6-1"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(12),
                heinKC64DataUIDPrefix + "D-6-2"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(11),
                heinKC64DataUIDPrefix + "D-6-3"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(17),
                heinKC64DataUIDPrefix + "D-7-1"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(15),
                heinKC64DataUIDPrefix + "D-7-2"));
        counts.add(new DefaultPopGenDataTDConfigCount(BigInteger.valueOf(21),
                heinKC64DataUIDPrefix + "D-8-1"));

        return counts;
    }

    /**
     * Configuration counts for {@code K69Data} with String allele and GT recursion.
     *
     * @return total number of ancestral configuration counts
     */
    public static Collection<PopGenDataTDConfigCount> getCounts_K69Data_StringAllele_GTRecursion() {

        Collection<PopGenDataTDConfigCount> counts = new ArrayList<>(10);

        return counts;
    }

    /**
     * Configuration counts for {@code KC64Data} with String allele and GT recursion.
     *
     * @return total number of ancestral configuration counts
     */
    public static Collection<PopGenDataTDConfigCount> getCounts_KC64Data_StringAllele_GTRecursion() {

        Collection<PopGenDataTDConfigCount> counts = new ArrayList<>(10);

        return counts;
    }

    /**
     * Class description
     *
     *
     * @version        Enter version here..., 12/10/09
     * @author         Susanta Tewari
     */
    public static class DefaultPopGenDataTDConfigCount extends DefaultTDMeasure
            implements PopGenDataTDConfigCount {

        /** Field description */
        private final BigInteger configCount;

        DefaultPopGenDataTDConfigCount(BigInteger configCount, String testDataUID) {

            super(testDataUID);

            this.configCount = configCount;
        }

        /**
         * Method description
         *
         *
         * @return
         */
        @Override
        public BigInteger getConfigCount() {
            return configCount;
        }
    }
}
